package com.aijk.commons.exception;

/**
 * DUBBO的自定义存在限制，满足以下几个条件才会抛出自定义异常
 * <p>1. 将该异常的包名以"javax. " 开头,java.开头JDK存在限制</p>
 * <p>2. 使用受检异常（继承Exception）</p>
 * <p>4. 把异常放到provider-api的jar包中，且其他包中不会出现重复的异常类</p>
 * <p>6. provider实现GenericService接口</p>
 * <p>7. provider的api明确写明throws XxxException，发布provider（其中XxxException是自定义的业务异常）</p>
 * <p>8. 实现dubbo的filter，自定义provider的异常处理逻辑</p>
 * 错误代码异常类
 * Created by iscdw on 2016/4/27.
 */
public class ErrorCodeException extends RuntimeException {

    /**
     * 错误代码,默认为系统未知错误代码
     */
    public final String code;

    /**
     * 超时异常
     *
     * @return
     */
    public boolean isTimeOut() {
        return code.contains(ErrorCodeConst.GLOBAL_TIME_OUT);
    }

    /**
     * 连接异常
     *
     * @return
     */
    public boolean isUnConnect() {
        return code.contains(ErrorCodeConst.GLOBAL_TIME_OUT);
    }

    public ErrorCodeException(Throwable cause) {
        super(cause);
        this.code = ErrorCodeConst.GLOBAL_SYS_UNKNOW;
    }

    public ErrorCodeException(String message) {
        super(message);
        this.code = ErrorCodeConst.GLOBAL_SYS_UNKNOW;
    }

    public ErrorCodeException(String code, String message) {
        super(message);
        this.code = code;
    }

    @Override
    public synchronized Throwable fillInStackTrace() {
        return this;
    }

    public String getCode() {
        return code;
    }


}
